package com.ydl.shopping.core.controller;

import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ydl.shopping.core.entity.LoginUser;
import com.ydl.shopping.core.vo.ResultVO;
import com.ydl.shopping.domain.TbUser;
import com.ydl.shopping.utils.PageUtil;
import lombok.extern.slf4j.Slf4j;
import com.ydl.shopping.utils.SecurityUtil;

import java.util.List;

/**
 * web层通用数据处理
 *
 * @author 林武泰
 */
@Slf4j
public class BaseController {
    // 默认成功消息
    String SUCCESS_MESSAGE = "操作成功";
    // 默认失败消息
    String ERROR_MESSAGE = "操作成功";

    /** 返回成功消息 */
    protected ResultVO success() {
        return ResultVO.success(SUCCESS_MESSAGE);
    }

    /**
     * 返回成功消息
     *
     * @param data 返回数据
     */
    protected ResultVO success(Object data) {
        return ResultVO.success(data, SUCCESS_MESSAGE);
    }

    /**
     * 返回成功消息
     *
     * @param message 返回消息
     */
    protected ResultVO success(String message) {
        return ResultVO.success(message);
    }

    /**
     * 返回成功消息
     *
     * @param data 返回数据
     * @param message 返回消息
     */
    protected ResultVO success(Object data, String message) {
        return ResultVO.success(data, message);
    }

    /** 返回失败消息 */
    protected ResultVO error() {
        return ResultVO.error(ERROR_MESSAGE);
    }

    /**
     * 返回失败消息
     *
     * @param data 返回数据
     */
    protected ResultVO error(Object data) {
        return ResultVO.error(data);
    }

    /**
     * 返回失败消息
     *
     * @param message 返回消息
     */
    protected ResultVO error(String message) {
        return ResultVO.error(message);
    }

    /**
     * 返回消息
     *
     * @param flag 操作结果
     */
    protected ResultVO toResult(boolean flag) {
        return flag ? success() : error();
    }

    /**
     * 返回消息
     *
     * @param errMsg 错误消息
     */
    protected ResultVO toResult(String errMsg) {
        return StrUtil.isNotBlank(errMsg) ? error(errMsg) : success();
    }

    /**
     * 设置开启分页
     */
    protected void startPage(Long pageNumber, Long pageSize)
    {
        PageHelper.startPage(pageNumber.intValue(), pageSize.intValue());
    }

    protected ResultVO getPageResult(List<?> list) {
        PageInfo<?> pageInfo = new PageInfo<>(list);
        return success(PageUtil.getPageResult(pageInfo));
    }

    /** 获取用户ID */
    protected Long userId() {
        return loginUser().getUserId();
    }

    /** 获取用户名 */
    protected String username() {
        return loginUser().getUsername();
    }

    /** 获取登录令牌 */
    protected String token() {
        return loginUser().getToken();
    }

    /** 获取用户信息 */
    protected TbUser user() {
        return loginUser().getTbUser();
    }

    /** 获取登录用户信息 */
    protected LoginUser loginUser() {
        return SecurityUtil.getLoginUser();
    }

    /** 密码加密 */
    protected String encodePassword(String password) {
        return SecurityUtil.encryptPassword(password);
    }

    /** 密码验证 */
    protected boolean matchesPassword(String rawPassword, String encodedPassword) {
        return SecurityUtil.matchesPassword(rawPassword, encodedPassword);
    }
}
